package com.example.springboot.config.event.transaction;

import com.example.springboot.utils.SendMailUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;

/**
 * @Author:ChenZhangKun
 * @Date: 2021/9/26 16:34
 */
@Component
@Slf4j
public class UserCreateEventPublisher {

    // @EventListener  // 这个注解会导致同一个事务里面的发生回滚
    // 当发送邮件出错时，注册用户不会回滚
    @TransactionalEventListener() // 事件发布之后就由监听器去处理，而不要影响原有的事务，也就是说希望事务及时提交。我们就可以使用该注解来标识
    public void publish(UserCreateEvent event) {
        log.info("【发送邮件了】");
        SendMailUtil.send("创建用户", event.getUser().getLastName());
    }
}
